{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "首先导入一些用到的库。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import tensorflow as tf\n",
    "from tensorflow.examples.tutorials.mnist import input_data\n",
    "from matplotlib import pyplot as plt\n",
    "%matplotlib inline\n",
    "\n",
    "tf.logging.set_verbosity(tf.logging.INFO)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Extracting ./train-images-idx3-ubyte.gz\n",
      "Extracting ./train-labels-idx1-ubyte.gz\n",
      "Extracting ./t10k-images-idx3-ubyte.gz\n",
      "Extracting ./t10k-labels-idx1-ubyte.gz\n",
      "(55000, 784)\n",
      "(55000,)\n",
      "(5000, 784)\n",
      "(5000,)\n",
      "(10000, 784)\n",
      "(10000,)\n"
     ]
    }
   ],
   "source": [
    "mnist = input_data.read_data_sets(\"./\")\n",
    "\n",
    "print(mnist.train.images.shape)\n",
    "print(mnist.train.labels.shape)\n",
    "\n",
    "print(mnist.validation.images.shape)\n",
    "print(mnist.validation.labels.shape)\n",
    "\n",
    "print(mnist.test.images.shape)\n",
    "print(mnist.test.labels.shape)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "可以看到images里面有数量不等的图片，每张图片是28x28长度的一个一维向量， 所以用的时候需要先给它还原成28x28的二维图片。labels中则是图片对应的数字的值。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAd0AAAHiCAYAAACtERYWAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzt3Xd81EX6wPFnUqgJXVF6DU0pKvaCAhbE3hvqoSjYOBX19Px5nGc5KyA2wIIV26Fgwwo2FESUIr1IB+k9JNn5/ZEw8501Gzab3dmUz/v18nXPZGZ35/hm8+x3ZmdGaa0FAAAkXkqyOwAAQEVB0gUAwBOSLgAAnpB0AQDwhKQLAIAnJF0AADwh6QIA4AlJN0AppZVSO5RSD0TZvq9SanvB41olun8oHq5n+RLD9Rxc0F4rpdIS3T8UX0V8jyo2x7CUUlpEWmutFxaUjxORT8KaVReR87XW70V6HEqHQq5nPRH5QETaikiqiMwRkdu11t8X9TiUDkVdF6VUHxEZLSLXaq1HBX7eTESWiEi61jrXU1cRpcKuqVIqVUQGi8jfRCRTRBaKyIla681FPa6s4NNfEbTW34pIxt6yUqqbiIwXkU+T1SeUyHbJfyMvEBEtImeJyHil1P78QS67lFK1ReRuEZmd7L4gLgaLyNEicpSILBORDiKyO6k9iiOGl4vnShF5V2u9I9kdQfFprXdrredprUMiokQkT0Rqi0id5PYMJfSQiAwTkfXJ7ghKpuAD1EDJH7H4Q+ebpbUm6VY0SqnqInK+5A9hoQxTSs2Q/E/O40RklNZ6XZK7hBgppQ4XkcNE5Llk9wVxcbCI5IrI+UqpNUqp+UqpG5LdqXhieDl650r+J+lJye4ISkZr3VEpVUVEzhGRSsnuD2JTMPf3jIjcqLUOKaWS3SWUXCMRqSkiWSLSXERai8iXSqn5WuvPk9qzOOFON3pXisgrmm+elQsFQ81vishdSqlOye4PYjJARGZorX9MdkcQN7sK/vffWutdWusZIjJGRHolsU9xRdKNglKqsYh0E5FXktwVxF+6iLRIdicQk+4ick7BMOQayf/yzeNKqeFJ7hdiN6Pgf4M3N+XqRofh5ehcISI/aK0XJbsjiJ1S6kjJ/52fIvlLhm4Wkfoi8lMy+4WYXSUiVQLl/4nIuyLyQlJ6gxLTWi9SSn0rIvcopW6W/A/EF4vIJcntWfyQdKPTR0QeTXYnUGKVJf9bri1EJEdEZorI6VrrVUntFWISXLcpIqKU2iMiW7XWW5LUJcTHJZL/wWmDiKwTkXu11l8mt0vxw/CyK1tEpiml7g/+UGvdVmv9l0/PSqmrlVKbCx4X8tRHRM+5nlrrSVrrTlrrTK11Ha31CVrrb/Y25nqWeoW+P/fSWncL2xjjPhH5reBx5WqIshz5yzXVWq/UWp+qtc7QWrfQWj+/t648vEfZkQoAAE+40wUAwBOSLgAAnpB0AQDwxOu3l3umXMAEcpJ8Hnon7tv1cD2TJxHXU4Rrmky8R8uXSNeTO10AADwh6QIA4AlJFwAAT0i6AAB4QtIFAMATki4AAJ6QdAEA8ISkCwCAJxztBwAo/VJSTTh/ZBenavYpz5j4jCv7mzjty2mJ71cxcacLAIAnJF0AADwh6QIA4AlzugCAUietaWOnPP+huiZe0m1UWOtKJtrc0sb1vkxI10qEO10AADwh6QIA4AnDy6gwUttnmXhu/9pO3YJznzVxSNwjSFPEHov5zObmJh79RC+nXd0XJseln0BFldaimYl/v6eeU/fXIWXr2uXHmLj+t+tNnBe/rsUNd7oAAHhC0gUAwBOGl1GupDVu5JR/v+8AE7950vMm7lI55LQLBT5/hsStC3427VdroYkb3Pm60+rFCceZOHfFyug7jb9IqVLFxE2+UU7dMw2/N3Gqstdmzp6dTrvbTulj4rx5CwWlk0q33zae8686Jl7SI/Jwcosv/uaU2/T73cSh3Qvi2Lv4404XAABPSLoAAHhC0gUAwJMKP6e7+tajnbIKrBapssEWNrV1H3fgZPtl9CrjpySkb4jO4keOMvHcy5526oLLf4JLf0Jhnzc/2lnTxFO2t4j4WodWX2ri8zK2OnWrJswy8Ycd3CVJ2LfgPO7KMXZp1ocNXy+suYiIdJt1tonV4+4Sk8qLfi1xn9KaNTFx7tJlJX4+/NW84Z1MvKTHyIjtWk28ysSt+/zi1IV/C6M0404XAABPSLoAAHhSKoeX193gDvlu7phj4rEnD4/ra7WrNDVi3W6da+KaKVWdunVX7DDxqmHuP+MTa3qaeMOFNUycu3xFzP1EZBf0tEtIwneTcpf/2M+YT29u6bT7/JQOJi5quc/3Z1xs4jOfe9apCy4n+lC6Ft1p/MXCf9mDyed2fTpiu9ZfXmPiNv3nmTi0Y6nTzv1NiM78Ee51++Dkp0x80cu3OnVN/vVDDK+AhUOOdMu9nwmU7Hu0xefusqCsfrNNHMu1LS240wUAwBOSLgAAnpB0AQDwpNTM6c4faedS5vYa6tRVVunBkqcehb+ua//U6oHYrXul6TcmvvytbibedGkTpx1LEErg8INNeH1dO7f60c4DnGbB5T+ztjYwcfag/Zx2ix6xFzHr/mpOXd4cu61ccHlY+vPuhc8JTDStvNP9XkLD/zL/F04f1ckpf3Ppo4GSvQbLct3tHbP62qVZoZw9Je5HTo9DTTy2p/udkQ6BLQoRuz2n2r/vY88e4tSlKrtUzFkWdPVvTjsdKo1nBhUfd7oAAHhC0gUAwJNSM7z87ImvmDh8WPe/G1qbeN2ezJie/3/T7BBSk/GqiJbRWdHdfl55pNcbTl1wp6LXmk008eVvdHPabbrInojDcqJimjLThP3O62/i1NUbnWbu8p81Jlp5p7vr1JwT7NKQ00Ze69SlzrHxhr5296scPc1pF1ye1PT1P9x+hPcfsvZOd2h4/1Q7pLxL27o+A29z2lXL+Smu/dj+d/t+PbiS+7dnu842cfN3Njh15WOw04+69ywxccdKVZy6nnPOMHHWffZa5JWT4eRw3OkCAOAJSRcAAE9KzfDykIvON/E/O9dw6vZ/3+46k7fBHT6MVpZE3nkqFq3G23jUi72cujVj7A5JN9RabuLgULOISJt+dli02b0ML8dKT7VDzdEO41ZZ7+5pM2JLMxNXWrvdqVs82H4T+eUr7DB08AAFEZFp2fYzLIfY71u/rO8i1p0z7wITVxsbeThZpdk/Yapq1YjtwuUdbKcXnmz3UsR23aZdbeL9Z8+N+vnhurnhFxHrto6202y1Fkz20Z2k4k4XAABPSLoAAHhC0gUAwJNSM6erp9kTJOq6KzFK/VfzQzPcuZ6Xnuxt4hsGPxve3Hjjcrvz1t33Hh7/jlVAu85y/x03trW/4sF53Loz3XnbfjWXmrjzh+5yn8Mr28cFlwVNzXY/s/6zr11qlCruIdsonsz03SbeEVaXc/JhJq5z71ITv9Xis2K8wqRCf/p92DXd72F/O+CVN1sut6cJHV/lVxMfM+Ncp12tV3/01qfSgDtdAAA8IekCAOBJqRleBuJh1UXuLkdzTrDD+8ElPuGH3QfrgsPJ4XXBZUFXvHuj067F1+V/uUM8jRh5hlO+/nZ72MArLeyavOt/ONVp90JTe03TJOy0kRK6avz1Trn15Io19BlPm88MnxjIt3OceyhJhl6cuE6khP1+lIJdrrjTBQDAE5IuAACeMLwcByvuds9ODXXZFtXj6qfaodDckw516tK+mhbeHDEIfts4+BnT/XnRdf2Wn2Ti5f+wh28wnFwyOxqFXwOrqrLn2I5u+lVYrR0yvG2N/bb6xxO6Oq1yDrTvr4Unj4yqT/V+KflhKMh3YO2thf686obI1z1W2afZa7/+Wnv+8kH1Vzvttp1vf69yV6+RZOBOFwAAT0i6AAB4QtIFAMCTCj+nm9aimVNe2PdAEz9z8YionqNbFXf3oVQV3WeZRmkZJh7x0lCnbkDTY6N6DrgavFXJKV/Q0C5LOajGKhNfX/cHp13DwAHq4Z9FFz3UzsRVv54Sh15CRCTr+T+dcrucG6J6XKtX7UljoXmLTNw8151jX/zwUVE934CVx5i4zhvudyl0eGNElHZAfac8ss3rgVKGlFRqrZomPnvyAqfuosxhJq6ZEvm0qQ7DLzNxo/OY0wUAoFwj6QIA4EmFGV7efsERJv7zEPtZ49/njnHaXZy5KYZnL/lnlx5fDHTKWfJziZ+zIqr6gTv8m/2BjacFrlO/rv2ddtvut7vnfHXwW07dsf+yuxL9Nq2xiTmovmTy5i9yys3vWhShZdjjonz+tJ3RLf/5eVRnE9fLYRlYzNLTnWKTtJINKa8b4C7FPPu6iSbuV3NVWOvIQ8pB+2UWvkuWT9zpAgDgCUkXAABPSLoAAHhSruZ0VZcOJq413N3+6+Nm9mSSaJf0vL/DzknM2tUoYrsPH+nmlFOz7UKDK/9tT0v56zyEVWlNesS6iiKtsftvnLt8RcJeS0+d6ZQzAgfZXDDJPf1mbKuPTXzQNXYpV5N/MadbmqkiJn9zAzPDtedne+hN+ae3udvfjtjSwMRF/e1LrVfXxMv/1sbEMwc+E8fe5duyq4qJ94/7s0eHO10AADwh6QIA4EmZHl7+Y7D7lfJ7L7ZLPS7L3ODULcu1J0/M3VPbxDe9eY3Trtpqu8zgwInrTZz3+/yI/agpkQ+6XvCPwC4tYUMsS3K2m7jZB9ulItp1lj0lJrg0R0Tkwz/sdMGBZ8/x1qctjzVxyqHn7HRBTutd3vqBkrn6kgkR6y5YaKcQUif+ErEdope3eYtTfnOFPfmnX027du+YO39y2nW93x5if2HGl3Ht0+A/2zvlBjfbJUO5cX2l6HGnCwCAJyRdAAA8KdPDy7W6rnPKwSHl7r+f6dTlPHWAiYO7FjWTyDvQRLvzTbjQCV1MfHatFwI17mecjaHA5vxT3G/TlmfBbylf9NAnJv55azOnnc8h5eBm6uc/7A5LpggHm5cFqfvt55RbV14Yse36Z5uZOFOSs/F9ebf7JXt4TPajOSZ+9IDpcX+tHG3/Wref1NfEWf9wpxlz/1ge99cuLu50AQDwhKQLAIAnJF0AADwp03O6dfu6y2xa3WpPjmk5yJ2rTZNlXvokIrIpy+56ckyVyJ9r+s263MT1JPKSpPLmj0vtkpzgUoInp/dw2rWU+M/9GIcf7BRPe+kb26da7lxgKPDZNH1+dKeZwL8tJ7Z0ymdUs3Pz27W761SV9TmCxKrxhl0C+NN/7I57x1cprPW+5emQiQ/7+VKnrtK7dhloi1ft3/5kLQsqCne6AAB4QtIFAMCTMj28nLva/ap/y0Gl46v/G7oWPqgxZ89Op5z5TM1C25V3Db+2G6On35Jq4ls6f+W0e+Gm001cd7Y7PJj21bRCnzu1fZZTXtW9nokzTre/H18f/LLTLrgsKBT2WTTrk+tsPPiHQl8XyXfl4HER65bkuNc0/YvCf3/gX9vvrjCxmpVp4ubDZjvtdJ4dXt5/29zEdyxBuNMFAMATki4AAJ6QdAEA8KRMz+mWFqfM2uqUx9Z6OlCyWz1eOftKp13tT6YmslulV2DLy2NmnGvirw5+y2l2/V1PmTgkIadu8LpDC33qM2u+6ZS7VLaPSwl8xgx/vuDnzzbv3uDUtH/Ubh1XGpcgIF/d1MgndT22+pSwn2xObGcQUftnBzjlZg/ZbXl1rn2HxboNb2nHnS4AAJ6QdAEA8ITh5Tg4v8YMp1wtJcPE83PsocnVhtfy1qeyota1e0w8eJw7ZPxgffvvmqOdKrl//19NHBJbGX4iUHD5z9o8ewD9MxuOdtp9NvwYE7d+wd3NjCHlsm9PKHXfjZAwD7TobOLG4i670+GNyznudAEA8ISkCwCAJwwvx2jdADs8WT/V/Rbykhz7LcpLHhxk4nqfuMOWEMldvsLEv53R2Klr9d/Cv6EsIjKn2ygTHz/jQhP/ubFGxMe0GmIHivXUmU5dXeHalGcjm33olA99/O8mbnnbj+HNgYThThcAAE9IugAAeELSBQDAE+Z0o6QqV3bK511vT8TZFtrj1PWa0t/ETZ5nrjBauStWOuWWl62M0FKkt9j53hqyKBBHVtGWJlQ094y5zCm37fOEjdPd96+E3KVlgC/c6QIA4AlJFwAATxhejlbIHZx8dfyJJv7kt25OXZO3WYIA+Nb0/9ypnFv/76iIbVuyRAxJwp0uAACekHQBAPCEpAsAgCfM6UZJ57jLgprdw5wQAKB4uNMFAMATki4AAJ4ordmnBwAAH7jTBQDAE5IuAACekHQBAPCEpAsAgCck3QCllFZK7VBKPRBl+75Kqe0Fj2uV6P6heGK4nj0KrmdIKdUj0f1D8fD+LH9iuKaDC9prpVSZ3GeCpPtXnbTW9+wtKKVGKKXmFfwhvirYUGv9gtY6w3sPURzh1/MkpdQvSqmtSqnFSql+e+u01l8UXM9lSekposH7s/wJv6adlVLTlFI7C/638946rfV9ItIhKb2ME5Luvv0mIgNE5JdkdwQlo5RKF5GxIvK8iNQUkYtE5AmlVKekdgwlwfuzHFFKVRKRD0TkNRGpLSKjReSDgp+XCyTdfdBaP621/lJEdie7LyixOiJSQ0Re1fmmisgcEWmf3G4hVrw/y51ukr898RCtdbbWepiIKBE5Kam9iiOSLioMrfVaEXlTRK5WSqUqpY4SkaYi8l1yewagQAcRmaHdXZtmSBkfUg4qkxPRQAm8KSKjRGRoQbm/1np5EvsDwMoQkS1hP9siIplJ6EtCcKeLCkMp1VZExohIHxGpJPmfnu9QSp2e1I4B2Gu75E8BBdUQkW1J6EtCkHRRkRwkIvO11hO01iGt9TwR+UhETktyvwDkmy0iHZVSKvCzjgU/LxdIuvuglKqklKoi+ZP56UqpKkop/t3Kpuki0rpg2ZBSSrUUkd6SP2eEMoj3Z7kzUUTyRORmpVRlpdSNBT//Knldii9+OfftMxHZJSJHi8iIgvj4pPYIMdFaLxKRv4nIMBHZKiKTROQ9yZ/jRdnE+7Mc0VrvEZGzJX8KaLPkv1/PLvh5uUDSdWWLyDSl1P17f6C17qa1VmH/TRQRUUpdrZTaXPC4UHK6jCIUdj3f1lofpLXO1Fo30lrfqbUOiYgopboXXM/6kv9pG6UL78/yp7BrOl1rfajWuqrW+hCt9fS9dUqp+yR/bXa2iJTJc2k5TxcAAE+40wUAwBOSLgAAnnjdHKNnygWMZSfJ56F31L5bFQ/XM3kScT1FuKbJxHu0fIl0PbnTBQDAE5IuAACekHQBAPCEpAsAgCckXQAAPCHpAgDgCUkXAABPSLoAAHhC0gUAwBOSLgAAnpB0AQDwhKQLAIAnJF0AADzxespQWbZkTEen/N0xz5r40j43OXWpX//ipU8AIlv0+JEmvuXUT5y6jy85ysShGXO99Qn7cKT9O7vkFveQnvknjDZxq4lXOXUtL/01od2KJ+50AQDwhKQLAIAnDC9HSS+r7pTrHlfVxBvbVHbq9vvaS5cQR9mndzXxxmu3O3XTu74e1XNcv+I4E3/3SSenrsXzi02cu3pNLF3EPqQ1bOCUh5/1kol7Vt3l1I0+opeJ685IbL9QtDUDjzbxgze+aOKTq+5w2uVoGw89fIxTN0zaFvrca2862ik3eMNOJeRt2FjsvsYDd7oAAHhC0gUAwBOGl6NUfYWKWHfARX845bznEt0bxEKlVzLx/Ce6OHUfnfGkiVulu9MFoSif/7lG39rHXPuNU9f54D4mbnQew8uJsOi6pk45fEgZyaMq2/fUpgsPceq+uf1xE1dTlaSkVvzDDilPvWGIU/f2DY1MPGzIeU7dfs9NLvFrR4M7XQAAPCHpAgDgCUkXAABPmNONg1256U655LMSSIR5T3U28fwznnHqUqSKiUOiJRr9lndzyqMaT4rYdlhnu8Th8bonmDhZyxbKo8bHrEh2FxDB4n/ZedzZfYaH1Ub3F/O5zS1M/Pyrpzt1DeUHE2fXtd/CSFepTrvLMlebuOtdTzh1V8itJk7k/C53ugAAeELSBQDAE4aXo1Tj9NUR67a85+6Es5/8EaElEi24LEjEHVKe3Ts4rOUOO63O22ni48fe7tS1GLvHxJUX2OU+ees3OO26vHWZiad1fc2p+2VXMxPrPTkReo/i2t37cBMPbfFUWG26IHmCy4Sqt99U7Md/sjPTKb93x8kmbvjRD+HNiy0r7G/FmH88ZuJTugy07a6bWuLXCuJOFwAAT0i6AAB4QtIFAMAT5nSLkNfNfs19fIennbpf99g5wfqvz3Lqot02EPG3+obDnPL8M4LzfPaavbClidPuf9f2NHHr73+M+Py5Rbx2dnbkOcTxK+3h3FW3LSniWVAcu+raa3pwJeZwk0mluelk0b/t38/fDwtfJlS44DK8dee5c7qVV0Y3t9rsI/sdjI5Nr3Lqph31gonDlxM1T7PLBmvMTdzvEne6AAB4QtIFAMAThpeLkFfZfibJUO7JMzna7loU2rbNW59QtP79PnDKKWJPh3poQ3sTTz4zy2mnlv4a1fOn1qhh4hXXHOTU3dHxfyaevsedZKh6CkPKyfR9tnt/kbm8qIkCxCK7h3ty1++XRzekfMuqY0y89nQ7rJu3YVVM/Uj9+hcTN/narRs770ATX5ixLqbnLynudAEA8ISkCwCAJwwvF2HpOXwmKWvywj5HBg8v+PjBbibOXBr5G8qS4n6rMe+ETibuPfxLE19fyx27Cg5lnz7v7LAnXRn59RCzttfPjqrdkBU9nXKlT+O7y1BFtfZme2D8gP7vR/WY4HCyiMiSE+x7NrSz/B8AQlYBAMATki4AAJ6QdAEA8IQ53SJkHsBSoPKk2po9+24k7hyuiMgnr42M6nHnLOxl4pTzdjp1eVE9A4prQP3gvLqK2G7eJ62dciP5M0E9Kt9SOrVzyg/fbHd46l51Z3hzI7jTVHBZkEhi53FVlw5OuVn6LxFaiizMyTZxzcWJW1LGnS4AAJ6QdAEA8IThZZQrC3bVd39Qc6kJX3xlmIkfXtvDaTbxj1Ym/vTwYeKqaqItod0m7vrR351WbW+zy1dCO3ZE22V40PR9dziZ4f7YHPeqOzxb1JBy0NT3DzZxww0lP4A+WvP6V3PKh1fWEVqKTNhhd6yr+sGUhPWJO10AADwh6QIA4AnDy2FSqtgzFY9tGHmT+pHrTgiUtiewRyiOOTe0d3/w3k8mPDDVDhMPbfC90yylgR3yCgWGk8Od+NQgE2c94g6TcY6yH8FdkNqkB69BFafdyrzA0GcuA8qxWn/dUSbuX/vxsFp7EMzqvF1Oza1/2F3ZmvxvrYkTfSXSmjc18aRTnwyrjfze/m5jq0BpfXw7FcCdLgAAnpB0AQDwhKQLAIAnzOmGSalV08RPNfgkYrtJ39kDzFtKESfWIOGyT+9q4uUXuzvJpBSxS1FQqgp8/tTu7Gz32eeauMEj/pY7IF9q/f2dcpdLZ5q4RkqV8OZGt7G3m7j1At6jsdpmp0glI6VyxHaPrTvRfdxxwXnRxM2Rhpt3gz2oPvg9jnCbAsv/RETWDG1p4urM6QIAUPaRdAEA8ITh5TC5zervu5GINPk0J8E9QVBKx7ZO+YAR9lD4UY2fN3Hw0Pr8cuHuWtPVKf9vymEmfrbnaKfuhTavmbjPhXbIMuNthiy9qFfbKY5q/GmhzbaGDRdmLuGewqdPvzjMKTeXyf5eXNlpJJ0a3UNuX3GaU67+7k8RWsYXv5UAAHhC0gUAwBOSLgAAnjCnG2b9PbsL/XmvuWc65UoTfzNx5HMrUBLr+9nt5ybc+5hTV9NZKhJ5WdBtq4808Sdf2TmnrCfdLT6zVttTRR478TKnLniI/cX32WVkH77tzjUiMfKqV4qq3cwc90SZA4awvMunA79P3labWy47wsRzL3w6qsf88L27ZayvpZ/c6QIA4AlJFwAATxheDvPsQa8HSva756u21nDaNchd4alHFce2i490ysEh5ZphOw/NybFLtp5c09PE84Z0cNrVfP9XE7fYbZcwuPtWuVIn/eaU2759g4l/u2CIiceefKPTLv2zn4t4VsQq8/HVUbXrP92dFmgksxPRHUTQ9O65Tnnt+Pg+f1qjhiZecEMTp+6ny4OnH0XeNevNbXZJaNZLm5w6X4Pj3OkCAOAJSRcAAE8q/PByWjN3mCJT2W88pqp0392p0NZ3dL+FHBxSHrujjlP30oWnmzj06+8mzgz7BmIsB8unVHWHsjscstTElQO/E6G06A5TQPGlNW5k4qyMZRHbXba0h4mbXrPKqePYer+OrbXQKb/f2k4X5S1YHNVzpLZrbeIFV9Zz6oac/5KJT666I+yRkYeUg0bfcJaJ02ZPi+ox8cadLgAAnpB0AQDwhKQLAIAnFX5Od/cot5yVbufz8gKHmWe87S4ZQuIFD6C/8+sLnbqsX6fG9bVS69U1cbWx7lztWy0+DpSYx/VhTa/GJh63/zinLlXZe4VNu+0uVCl73CUgKt3uZKVz9sS7ixVG61F2ydbgXp2duvv2s0vyrq6x3KlLHWf/fs7c2Uii0bn6JBNflhndUrFw43bYneJu/+Jip67tj3YZWSzf94gH7nQBAPCEpAsAgCcVcng5NauliW9rNi5iu0uW2J2Oaozxc8BxRVZvhnt0xKbQLhNP7TXEqev6/EATt/u/P0yct3ZdxOdPa9jAxDs6NXTqBg5908SnV9vi1AWHoZ7ebH93qn47N2I7JE5w2ufjtoH373y3Xet3B9j4Fj+b2ZdHuYuXmnjCsGOduoGD7b9r+K5xfWqstIVgHAc7tTtd8PRGO+z9zd+6mjjr5ylOu9LwHuVOFwAAT0i6AAB4QtIFAMCTCjmnu6dhTRN3r5odsd38t9qYuL7mQOxEyxzjzrsd32qQiX/r/5RTN7/3cyaefbI9M2jggosiPv/r7ewJUuHzT8HlSeHzPretttvZzb3JHnyttv0mSIwqG+1VWJS7y6lrmVa10MfsCpvnq7aae4p4q/PiZKf8f/27m/j6/SY6de3S47uNbvD7FK8OPc2pqzci2K9ZcX3deOO3EgAAT0i6AAB4UiGHl4ty/YrjTNzgzXkm5sQS/+q7Ywk4AAAgAElEQVTMtf/qz21u4dS1r7LCxN2q2KHhzzu8V8QzVolY89yWpiZ+8qPeTl3re6ebWO1mSNmHjHfsEr0LDxjk1P36j2dM/J/1bU383oiTnHYNhzMllGiLuu428V2tLnHrrjrAxKec+rOJHz/QnUbq8MqNJlZF/KFt+cYGE9f7fXLkhqUcd7oAAHhC0gUAwBOltd53qzjpmXKBvxeD4/PQO3HfqT+Z1zOtWRMTL3i4VsR2Dx3yvol/2NbKxOMnHOG0a3532RquSsT1FOE9mkzl7T1a0UW6ntzpAgDgCUkXAABPSLoAAHjCkiGUSblLl5m4+cXLIrYbIcGlRnaXo+ZStuZwAZQP3OkCAOAJSRcAAE9IugAAeELSBQDAE5IuAACekHQBAPCEpAsAgCckXQAAPCHpAgDgiddThgAAqMi40wUAwBOSLgAAnpB0AQDwhKQboJTSSqkdSqkHomzfVym1veBxrRLdPxRPDNezR8H1DCmleiS6fyieGK7n4IL2WinFiWqlUEX8m0vS/atOWut79haUUmcopWYVXOgflFLt99ZprV/QWmckp5uIUvj1PEkp9YtSaqtSarFSqt/eOq31FwXXM/JZgUi28OvZWSk1TSm1s+B/O++t01rfJyIdktJLFIe5pkqpekqp75VSG5RSm5VSk5VSx+xtWB7+5pJ0i6CUai0ir4vI9SJSS0TGi8g4PjWXTUqpdBEZKyLPi0hNEblIRJ5QSnVKascQE6VUJRH5QEReE5HaIjJaRD4o+DnKpu0i8jcR2U/yr+l/RWR8efqbS9It2iki8q3W+jutda7k/wI0FJETktstxKiOiNQQkVd1vqkiMkdE2hf9MJRS3UQkTUSGaK2ztdbDRESJyElJ7RViprXerbWep7UOSf61zJP85FsnuT2LH5LuvqmwWInIQUnqC0pAa71WRN4UkauVUqlKqaNEpKmIfJfcniFGHURkhnY3G5ghDCmXeUqpGSKyW0TGicgorfW6JHcpbki6RftCRE5QSnUrGLK6W0QqiUi15HYLJfCmiPyfiGSLyLcico/Wenlyu4QYZYjIlrCfbRGRzCT0BXGkte4o+aNSl0o5+1BM0i2C1nquiFwpIsNFZLWI1BOR30VkRTL7hdgopdqKyBgR6SP5H546iMgdSqnTk9oxxGq75P9hDqohItuS0BfEWcFQ85sicld5+t4FSXcftNbvaq0P0lrXFZH7RKSZiExNbq8Qo4NEZL7WeoLWOqS1niciH4nIaUnuF2IzW0Q6KqWCU0AdC36O8iNdRFokuxPxQtLdB6XUoQXzf/uJyAgRGVdwB4yyZ7qItC5YNqSUUi1FpLfkzwOi7Jko+V+0uVkpVVkpdWPBz79KXpdQEkqpI5VSxyqlKimlqiql7hSR+iLyU7L7Fi8k3X0bKiKbRWSeiGwSkWuT2x3ESmu9SPKXIwwTka0iMklE3hORUcnsF2Kjtd4jImdL/nTBZsm/tmcX/BxlU2UReVpENojIShHpJSKna61XJbVXccQpQwFKqd2S/wWbYVrre6Nof7WIPCkiVUSkvdZ6cYK7iGKI4Xp2l/wkXFlEemmtv05wF1EMMVzP+0TkVsm/ntW11nkJ7iKKqSL+zSXpAgDgCcPLAAB4QtIFAMATki4AAJ543US6Z8oFTCAnyeehd9S+WxUP1zN5EnE9RbimycR7tHyJdD250wUAwBOSLgAAnpB0AQDwhKQLAIAnJF0AADwh6QIA4AlJFwAAT0i6AAB4QtIFAMATki4AAJ6QdAEA8ISkCwCAJ14PPAB8S2va2MSbj2ho4tW99zjt+h8yycQDa8936g767moTh5ZWN3Grwb857UI7d0bux4EHmDh39Zp9dRsoV3K7H2riDR0qO3W79rdnMuhWO0x8Z6fPnHZ9a9r3zac73ecYNKKviRs88kPJOptg3OkCAOAJSRcAAE8YXka5smrQ0U75nmveNPE5GesiPi4l8PkzJCGnbsaxL9jCsTbstPsWp13T+yIPa1V+K8/EucdHbIa9lD2KdF3/o5yq/je9b+J+NVfF9PQjtjQw8ftnHmni0NIVTjud405DIHpbLrf/rl89PMzElZWbdkJS+JG/KeIeR5ujbbvuVd2pnO9uftzER6feZuJGD5W+oWbudAEA8ISkCwCAJwwvh0np1M7E826tauIrOv/ktLupzhQTd398kFN3wJDSN6RRnqW2zzJxcDhZJPKQ8p952U75j9xqJs6TdKfusEp2iDE1MOz52zVDnXZdt9rh5gMfd38Hjq2zyMQTpEahfarwUlJNuPyeI0w88/rhER+Sre2w/apc95pWCYxO7p9azanrW8MOI/ed+K6Jh25q5bT7svdBJs5duixiP/BXW8/ebuJ0Za9t+HDystxdJr5nxZkRn++nuS3s81V3h/2/O+ZZEx99tl1VsPwJ91vOOtv9HUkG7nQBAPCEpAsAgCckXQAAPKmQc7qqsh3nX9PvUKfup7vsPN22kJ03OHLM7U67bzrbuZ8TLp/q1M0bEpduIkpz78owcfgcbvAanvjztSauP7SK0y514i8Rn3/9dXbJSu8B35j47nq/Ou3y3Okjx3cbWwZKf0ZuWIGtHBTtPG6uiTu9YefRW9wx2WmX2q61ief+I9Opm3XScyYOLmG5pfZC98U+tOEX3Zo7VXnrN0TsI0SaXbvSxAM+tevkZm08wGlXO7DyLm/+IokkSzZGrDviub+beP4Zdn638203Oe0aPZj879twpwsAgCckXQAAPKkww8spVexw4twhHU288Ax3GOupzXZI6p3Bp5q45dthQ1dZdrhwRsvOTp0+w65VSNtplzSkfTmtuN1GFP533LOBkvs5csAfdglCg3N+j+n56z1vr/1X6+yWVHcP/7Ww5oWa96n9vWrE8LKIiKg0989PpWOiG6496H92yLB12JByUN6cBbZdH7fuuH52TPORO0eYuFuVHKddcLj5y8yD3SdheLlIeZs2mXj6SDtFU2uRu2wnb37kqZ1ope4o/P6xQ695TnnLgyV+qRLjThcAAE9IugAAeELSBQDAk3I7p5tSzd32beUbTU28sKtdLvDEptZOuwk3nWDijK9/jPj8wa+2V9u01akbOHmiiUetsV+V3/LlPjqNmBxcyW7bGL7F3NT5dplHlpR8Di5zlp2P/W63u+yo7uzc8OaGVhGrKqzUJo2c8tRD3yy03VObWzjlts/ZucK88MZRqjfCzgWPvfYwE3drEHmOGLGrOyo5/6696/3mlF+XRhFa+sOdLgAAnpB0AQDwpFwNLweHlOc+fpBTFxxSfmxjGxN/c2Z7p13qkuJ/fX35Ve4QdfeqE0y8cT/7fK/U6ui0y9u8pdivhb86cdZ5Jv78oLedutHdRpn4AXGXdkUrt7vdtWy/++20Qos09/rVu22JiXd84D6HKvyc7gpt6UUNItZt13ZZyZgHT3Xqav4eedonFouvambi78e7p4kdUzlk4gX93P62uNfuuKRzI08tIP6yT+vqlK/qObHQdu+v6xL2k+Qv1+NOFwAAT0i6AAB4Uq6Gl/+8rJOJF575tFP30U67Kf43Z3Uwce6SpSV+3T01I48dztlth6QYTk6MjIH21/jZd92h/n4155t4/jOHm7j9f1c77daebL/VeMaNk5y6PrXsIRgN0oKnGrgnHLzSYryJe/dyN1rPrcr4sohIat06Jr7zyrcjtnt3m/3Wec3X4zucHC5vtt216MoJ/Zy6hWfaaak5fdy/Kae/F9jm6udZielcBZZao4ZTXnuJ/bt93UB3/qZvjRUmXpq7y8QbHnUPqajC8DIAABUHSRcAAE9IugAAeFKm53TTGrpf4b9j0BsmXpm306l76L4BJq6xuORzRGktmpm492k/RW6IhAueJvPq0NOcuv732bq5ZwXm5M5ynyMl8PkzJCG3Ugo/nf7ONUc55fHf2J2N2s5c4dRd94g94WjCve5cVUWiAqd9XZa5Lok9KVyNuWF/Es8svJ2IyLzr7f+XrGsS1KFyKKWzu0xzVbdaJt7axi69uvYY97sVg+p+XcSz2i3fenx8q4mzxk+JsZeJw50uAACekHQBAPCkTA8vh+q6w3TnVbcbof97/RFOXY03ij+kHDxke+XAw526u659y8QXZyT/a+gV2a6z7LU57rqpcX/+vn/0NPGftzYxccqMhU67Vjvt7xj7E5XM15vaBkqbk9YPRC/twAOc8pWT7CEHp1RbY+J0cYd801VqiV/72Nvt9GHWW/H/GxBP3OkCAOAJSRcAAE/K9PByUc6sMd0pf9jvFhOn74y8O9DG0+1uJh8e/YyJW6a5QyLv77DfuGs17nqnLriLzdSNTQM1q4ruNKK28Wr7zeELb/vMxANrzw9rGd3nyuAQV/un3d2kGj/wQ6BkhzrDv+NclBRVnNbl1+JrmkXVbtYY+w3X+vJDES1RWuja7nTfOdU3BkqVEvrazoEioVhPWfaDO10AADwh6QIA4AlJFwAAT8r0nG5o5jynnPW2/dr4/Aufceqm3OeeEBKNT3fVNfHZo/7m1DV5ZJqJ27bZ6j4wsIvNgql2TrcFc7oxS2va2Cnfe/doE59WbZuJw3eT2phnD0M/c4a9hq8c9LLTrlW63XUqbXeJulqokObzrYjI7qZ7kt0FJMpqd+nkEdMuNXGX/Vea+NuvDnbaVV2rpDC76rvfvfn3eWNMfF7Geqeu190TTfyxdDNx5pjEnlAVC/4SAADgCUkXAABPyvTwsmh3+KHV3+1QwuFzb3DqQr02SWE2r8t0ys3es3GlT+3OJo3Dli0EX1nPmOvU/Wf9QSa+/BS7afcPdyT2a/PlTWqbViZ+aMJrTl2bdLvEZ1muHULu9dogp12rZ/4wcZ2VdjlR71fd34+5J42y7U4JmwZ4MrBjTozLEV5441QTN2IJDMqhvE3u39j9zrTl4PEfzWWyxOLVp+wug0+9VM2p++pgu0PgpGtb24q3w3a7KgXLibjTBQDAE5IuAACekHQBAPCkbM/pFqHe82HzBs8X3m7/OLxWat06TrlLNTu3PG1n8zi8QsW04L4MEwfncEVEvthl5+L/9cDNJm72knvdI5320+oKd5vQ8yadbuIJHd5x6o4cYLcQ3X94bPOxjR5kHndfVuftNHGNZaX/nKbqC/mOhk+5q+1JRRmnunW3TT3WxB+3fd/ER157o9PuL3khCbjTBQDAE5IuAACelNvhZZ90Q3eQ+vRq2018y7f2NJws+dlbn8qDl498MWLdo7dcYeI6H5V8yGjRpy1swR2RkmsGjDfxuOF1BYmRmWKnELJr2Lhqgl83tZ1dYnL5tROiflzT0YtNXPoHw+MjtXZtp6z32B3GQjt2+O6O8ek3XUz85MV2KuecG7522n37fBVvfYqEO10AADwh6QIA4AnDy3GwsmediHVp69M99qR8SQ3s+5US9vmw8obs8OYl0uxlO1T4Wh/3cIVjqi408Uf1skyct35DXPtQEWTODnzj9xS3LkPZQyeOusXuBjfnlcT2qeHLdgeyW2sviNiu3Wh3F7MWf06N0LJ8SWvcyMTtP1jp1H34gZ0+azI4sd/QV5Xt78eyQYc6dXf0ej+8eX6fKq0P+0mjQtv5xJ0uAACekHQBAPCEpAsAgCfM6cZBdm2970Yottc2HG3iLg2+c+qW/t3GLR5qb+LQr7/H9Fo6154+siXPPcGkXSX72XTdOXZOt+7I6Jcqbbv4SBOXxoO1fWk8Zqkt3Bq53cHV7Lk0c+SAuPdj8cN2LvLthk8Eaio77UZusfP7rZ5c6NTl5VaMhUJbDm9o4ofrj3Pq7r7mexMfWu/vTl2bUVuL/VqLL6hl4pzaIafu/h7vmvjCDHf+OEWUiYOPeub+8512NSX57z3udAEA8ISkCwCAJwwvo9T67ItDbKGPO7w849gXTLzqA7t86PF13Z12n3zbRaIx9twhJg4/XGF6tv1sut/rv5nYHfwq2vn//MzEE8bUKMYjyxcd2LVo6KZWTt0tte3w7SWZy0z8wCu9nHZtHrMHI4RmzI3qdbdfcIRTnn75kyauGliqFBxOFhEZd56d4sj7M/JyovKs+spdJv7P+oOcun/Wm2Xieec+49SlnBsc8g0u/1NOu2Cd8/go24mIrAsclnHMB7eZOOtd92CT0jARyJ0uAACekHQBAPCEpAsAgCfM6SZAqrKfZWrPTmJHyrhWQxaZ+KeL3O00j6icY+JGafYcmsfDlhY9fpFbjiRF7POHwmZrP9nW0dbt3CmxGDnnGBM3kZkxPUd5kLd5i4m/7O3OD8qHNgzO7y7oPspp9urhdgnRf8e4S0KCLjv3KxvXfNypq6qqhTcXEZGnXjvLKTeak9itDcuEH2eY8Jtbj3KqTv6HnZf/X9u3nLrgtp7h87NB7nIfO+v6+jb39LbzM+x2nR0+HeDUNR1rn6P1Rz+ZuDTM4YbjThcAAE9IugAAeMLwcgLkaTs8WXvO9iJaoih5a9eZ+OFTz3Pq5g3Yz8T9un9p4oF1YtuRqu+yE008dYI77NnihWWB0gqJRZMLKu6QciS5S5c55TeGBo4duiUQ1nZ3groic42Nrx0e5au5w8kvb21g4vfOP8HEjeb8JIgs7ctp7g/sW0/OPOMWp2rVJfaA+ynH2eVE58+72Gm3/kN78o8KzOw0eN1dDja6kx36z/rq56j7XNpwpwsAgCckXQAAPGF4OQGC315GfOTNX+SUWw205a+keiDuGuMr2M3Zm4j7jdWKsa198gUPkPjs5Xom/qJZZ6fd3Bvtt1qPPdxOJ3w3pb1E0nbEJqccmr/ExDpnXvE7i7+oMn6KU24x3sYXi93ZK03caYUDwsp75YWV077aWKL+lRZkBwAAPCHpAgDgCUkXAABPmNNNgEU5dplQ6ma7g1H4HAWAwukcu9wkb8Fip671Lba8NvjzIg4o572H0oI7XQAAPCHpAgDgCcPLcdDsn5Od8oB/HhsouUtdAAAVF3e6AAB4QtIFAMATki4AAJ6QdAEA8ISkCwCAJyRdAAA8UVrrZPcBAIAKgTtdAAA8IekCAOAJSRcAAE9IugAAeELSDVBKaaXUDqXUA1G276uU2l7wuFaJ7h+Kh+tZvnA9y58YrunggvZaKVUmzw7g28sBSiktIq211gsDPxshIieISGsR+ZvW+uVoHofkC78uSqksEXlURI4WkVQRmSoiN2ut5xX1OJQOhVzP40Tkk7Bm1UXkfK31e5Eeh9Ijwt/cziLygoi0E5E5ItJXa/1roL6ZiCwRkXStda7XDscBd7r79puIDBCRX5LdEZRYLREZJyJtRKS+iEwRkQ+S2iPETGv9rdY6Y+9/ItJbRLaLyKdJ7hpipJSqJPnvyddEpLaIjBaRDwp+Xi6QdPdBa/201vpLEdmd7L6gZLTWU7TWL2itN2qtc0TkSRFpo5Sqm+y+IS6uFJF3tdY7kt0RxKyb5B85O0Rrna21HiYiSkROSmqv4oiki4rseBFZo7XekOyOoGSUUtVF5HzJvzNC2dVBRGZod95zRsHPywWSLiokpVQjEXlaRG5Ndl8QF+eKyHoRmZTsjqBEMkRkS9jPtohIZhL6khAkXVQ4Sqn9ROQzEXlGa/1msvuDuLhSRF7RfDO0rNsuIjXCflZDRLYloS8JQdJFhaKUqi35CXec1jqqZQoo3ZRSjSV/LvCVJHcFJTdbRDoqpVTgZx0Lfl4ukHT3QSlVSSlVRfIn89OVUlWUUvy7lUFKqRoiMkFEvtda35Xs/iBurhCRH7TWi5LdEZTYRBHJE5GblVKVlVI3Fvz8q+R1Kb5IHvv2mYjskvy1nSMK4uOT2iPE6hwR6SoiVxdsmrD3vybJ7hhKpI/wBapyQWu9R0TOlvxrullE/iYiZxf8vFwg6bqyRWSaUur+vT/QWnfTWquw/yaKiCilrlZKbS54XCg5XUYRnOuptR5dcP2qB9d3aq2XiXA9y4C/vD9FRLTWbbXWL4Q35nqWCYX9zZ2utT5Ua11Va32I1nr63jql1H2Sv3dCtoiUyfl7dqQCAMAT7nQBAPCEpAsAgCdeT2nomXIBY9lJ8nnoHbXvVsXD9UyeRFxPEa5pMvEeLV8iXU/udAEA8ISkCwCAJyRdAAA8IekCAOAJSRcAAE9IugAAeELSBQDAE5IuAACekHQBAPCEpAsAgCckXQAAPCHpAgDgCUkXAABPvJ4yVNYsGH2Iief1GOnUnXTjABNXG/uTtz4BQEWQ2qGNU156bl0TH9ZrllP3StNvTJyj86J6/u439HfKVd+fUtwuxoQ7XQAAPCHpAgDgCcPLRdH2DOKQhJyqld1t3Hqsrw5hr7TmTU28/JyGJt6Wleu0a5O10sTj24wzcdaH1zvtGk2wnz9rTF/j1OntO02c9+efJlZp7ttn1c2Hmzi3qtvfJo9Ns8+XnS0A/mrrpUea+PS7Jjp1Y+vOjPi4HG3fv+F/qyN5dshQpzxoXh8T581ZENVzxII7XQAAPCHpAgDgCcPLMWrZbpWJVeXKTh3Dh/G3ZuDRTvnnQU+ZONrhpGCr+b2fc+t6R36Ot7YdaOIX/36OiVcd5759Zl7pDlcFnTHxWhOr73/dV1eBciulShWnvOhfXUw8+4rhJo72fR2rrPRKTnnOLbVt3fXhreOHO10AADwh6QIA4AlJFwAAT5jTjdHHbd838VkZPZ26POZ04yK1VXMTj77lybDa4v/qjt2+v4nPy1gf9eMuylxt41HPmDgl7DNrcAZqerZbl7pld6HtKpq1N9u5+a2H7S6iZWKlV7ZLy2Yd+1LEdr0bHuqjO+Wfsssvg3O4IiIzrxgWKJX8PrD92zdFrPv9wqci1j104jsmfunw3rZiSuSlSrHgThcAAE9IugAAeMLwMkqtVb3sUp12lSJ/Pjxp5kUmrn5/jYjt0ldvNvELDWo5ddl17fKBAY+849Sdk7Fu350VkVl7tIkH3TbAqas2i0MxRER2HGl395pzwsiI7YJD97EuHYn2OYI1r21tHNNr4a9Cx9lh5MX97M9/P2lYIa3/6t3tBzjlf35nl+s1Huf+Paj6gT2soJX8aGLVpYP7pBdGfr3g+3xYi+omzozzOQjc6QIA4AlJFwAAT0i6AAB4wpwuSq1jr5gWsW513i4Tr51Z38Spp0V+vvo/23nbtYeluq/Vwy4LiHYON9yHWzubuNpY5nAL03rAEhOfm3mOU7fkqiYmzq5tZ1qVlpiE6u0x8Zwez0ds1/ZjO//e7o6FYbWbYnvxiiiwLEgkfB53RFRPcca8M00cunc/py7r+59j71spwp0uAACekHQBAPCE4WWUWh/93MnEj5zxrVPXJC3DxHMuHS5RudqG6codXs7ReYGS+1l0fWAo+7h3bjfxxAsec9rdXc8OUXe78AanLuPtHwUieZu32EIwFpHG96+I62ttv9AeiC493LqFOXZHqnaPbrT928RwcnEETwwK32kq2qVBP2Wnm1iftNLESlYW1rzM404XAABPSLoAAHjC8DJKraz+diuYQ+r2depmHvOyiWPZsSgn7Bux43bYA6yHLunu1KUMrWfilh/bYeLjqt/qtJt7xtMmXtUzz6nLervYXUQJre69J2Ld4BV2Q/u8+Yt8dKdc0u1amtg9uCCydl9e55RbjrDv3xT5NT4dK8W40wUAwBOSLgAAnpB0AQDwhDldlAktBrvzc9063BChZWxq/bzGxFUXLwmrDS/v28FZy51ydiydQoks6D7KxKGw+4tpU1qbuJVs8Nan8mZl95omTiniHm7sjjombj08x62M8yHxRQn28a/LBm2s3c214twHAADgBUkXAABPGF5GmZA3e55Tzpgd3+fP3XeTv2iTFXnHnJnz3cPQs2RNhJZIlJDoQOwuK4v1EIWKLq1xI6d86qWTTVzU0r07v7rIxFlT4nwqfBFW3OuWg30MXzZ45VK7bVntj343sbv4r+S40wUAwBOSLgAAnjC8XJTAGFT4N/PCv/mGiiGnx6EmntDGPSN0cmDj9jbP7HTqGM1MvF1nHR72k8jnMefVsd+gXfyGPQf50KbLnHYDD/zcPkbcr7Re++KNJm78nx+K09Uya+Nx7vDyf+qPjdi256wLTdzujrkmjvdwbbilb3U08YudX476cYuea2viWlsnF9GyZLjTBQDAE5IuAACekHQBAPCEOd2iBLYlCf86fPDr5nMebOnUZV23UVB+pGRmmvjBEXYeN3xe/5vtdk5IT4/zmqZyKLX+/k5529HNTbyrjr0fSDl3fVTPN7rDkLCfVI7Ydu7Jz0X1nH3/6GniaZ+2d+qaPWFPxCn+OVdl04Yzd+67UYHlK+qaOGtr8Xd1i9UdHT8z8WGVI88g9112olOu++lCEydy3pk7XQAAPCHpAgDgCcPL8VCpogwuVQypdes45e1v2E3du1SOvKPNi5NOMHFr+SkxnSvjck4+zMSZ9y516sa2GG7i4BK9onY6cqXvu0mB4LDxn7c2idzwxxkmbCLusqCK+K6/u/OnTrmoQw6y+v6c6O4YWz+xU3x9agSXikXu3+8vdnDKdf9M3DKhIO50AQDwhKQLAIAnJF0AADxhThcIs7xvW6f880FDC233n/UdnXK7J9eaOJZTiyqCP06zf3ImtJjg1L2+raGJN+dVM/EHqzo57dZ93VAKM6zv8065e1W78KPrL5c4dXV6zw+UNhfdaRh52r1Pi36+veRSa9nvVix8rqlTN7vjS1H1qf3bN5m41Ug/c7jhuNMFAMATki4AAJ4wvIwKKbjLlIjI2tcbmPi9To+Gta5komGb7NDzhEeOc1rVXPxj/DpYTtWaY3d5y/r4eqeu3SA75Ju3eYuJK8kfTrtGYeW9frvUHXI8vsqCmPuJ5Aue6CUiUv9+ez3HNnkhrHXh949f7HLf521G2t0CE33aUSTc6QIA4AlJFwAATxheRqm1ZuDRJq7Uw930/vH2b5s4pKP77PjA0tNNPLj5+05dcKep4HByuK8vsjwmBRwAAAQASURBVDsq1ZzNcHJx1RsxORC7dYkc7kt/rc6+GyGuNlxzlInrjorum8LzX7JDyk0bbnDqRjb5sth9uOmTK51y69+Tv1Mcd7oAAHhC0gUAwBOSLgAAnjCni1Jj20VHOuWfBz0VsW3wAPkcnRPV83/c1s7jhh9AHzwxaEtot1PX/bFBJj5gtnvSDJIrtf7+Jm6QXvhSIhGRtN0V8Uyg+HtkxslOuc+xL0VoKdK+72wT/3yg/X5Gv4s/dtrdUGuRidPVrybO0eGz/JHvEYPv56zRN5q49T+Ss+tUUbjTBQDAE5IuAACeMLwcRqXZf5LK1fcksScVz+qe7jEBRW1cHhwOjmXT9fAD6IPP8X9rujt1DT/708TJ2sUGhdt2dHMTn5PxUVgt9xTx1mhEulOe3NUO6x5R2Z3mcZb4XB95uU/w3Rvt+zq4M5yIyMjxdti7xb9+MXHY27xU4LcSAABPSLoAAHhC0gUAwBPmdMOkNG9i4l+PfjFiu+CykgYf888Yq9S6dnu+Sw6dksSeWE82+NYpfz0+w8RPHdvNxLlr1gpKj5Swe4jgezRtO7Px8ZD25TSnfPvg/ib+9sFhcX2tFbnZTvmRtT1NvPyqxk5d89/t0qDSOI8bxJ0uAACekHQBAPCEcdFwGzeb8OBXbjbxYcfPdZqteLS1iTPeT/7JFWVVTnt78Ph9+0+I+/Of+vv5Jl47qaGtUG67uy6zpxZdlLnaqTux6nYTP1U58glESK7wJSavbDnYxOlfTAtvjjio96ndTapL41ucuun9h5bouc8ZeodTPvCJ4G5w80v03MnEnS4AAJ6QdAEA8ITh5TB5GzaauHlgs+wNYe2qSun4pm1Zl77aDucfO/0yp+67Lq9HfNzqvF0m7vmqPZCg1YgVTrvKq+xQceOcyBvij3mui4nfqnaUU7f10AYmztxadoe1KpqRc44xcROZmcSelF95a9eZuPF/1jl1Z/6na4me+0Apn4eLcKcLAIAnJF0AADwh6QIA4AlzukiqvIVLTFynt1t3pkQ3J9RM7Nx7bhHtiuzHn39GrKv2x3LbLsbnR2Ks7BG5LuPjjMiVQJJwpwsAgCckXQAAPGF4GUCZlbLbbi32+IaDnLo6L00Obw4kHXe6AAB4QtIFAMATki4AAJ4wpwugzGp5248mniRVk9gTIDrc6QIA4AlJFwAAT5TWOtl9AACgQuBOFwAAT0i6AAB4QtIFAMATki4AAJ6QdAEA8ISkCwCAJyRdAAA8IekCAOAJSRcAAE9IugAAeELSBQDAE5IuAACekHQBAPCEpAsAgCckXQAAPCHpAgDgCUkXAABPSLoAAHhC0gUAwBOSLgAAnpB0AQDwhKQLAIAnJF0AADz5f3XpyC6H9WCIAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 576x576 with 16 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(8,8))\n",
    "\n",
    "for idx in range(16):\n",
    "    plt.subplot(4,4, idx+1)\n",
    "    plt.axis('off')\n",
    "    plt.title('[{}]'.format(mnist.train.labels[idx]))\n",
    "    plt.imshow(mnist.train.images[idx].reshape((28,28)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "接下来，定义用于训练的网络，首先定义网络的输入。\n",
    "\n",
    "这里我们直接使用上面的数据作为输入，所以定义两个placeholder分别用于图像和lable数据，另外，定义一个float类型的变量用于设置学习率。\n",
    "\n",
    "为了让网络更高效的运行，多个数据会被组织成一个batch送入网络，两个placeholder的第一个维度就是batchsize，因为我们这里还没有确定batchsize，所以第一个维度留空。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "x = tf.placeholder(\"float\", [None, 784])\n",
    "y = tf.placeholder(\"int64\", [None])\n",
    "learning_rate = tf.placeholder(\"float\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "\n",
    "def initialize(shape, stddev=0.1):\n",
    "  return tf.truncated_normal(shape, stddev=0.1)\n",
    "\n",
    "L1_units_count = 100\n",
    "\n",
    "W_1 = tf.Variable(initialize([784, L1_units_count]))\n",
    "b_1 = tf.Variable(initialize([L1_units_count]))\n",
    "logits_1 = tf.matmul(x, W_1) + b_1\n",
    "output_1 = tf.nn.relu(logits_1)\n",
    "\n",
    "L2_units_count = 10 \n",
    "W_2 = tf.Variable(initialize([L1_units_count, L2_units_count]))\n",
    "b_2 = tf.Variable(initialize([L2_units_count]))\n",
    "logits_2 = tf.matmul(output_1, W_2) + b_2  \n",
    "\n",
    "logits = logits_2"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "接下来定义loss和用于优化网络的优化器。loss计算使用了sparse_softmax_cross_entropy_with_logits, 这样做的好处是labels可以不用手动做one_hot省了一些麻烦。这里使用了sgd优化器，学习率为可以根据需要设定。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "cross_entropy_loss = tf.reduce_mean(\n",
    "    tf.nn.sparse_softmax_cross_entropy_with_logits(logits=logits, labels=y))\n",
    "\n",
    "optimizer = tf.train.GradientDescentOptimizer(\n",
    "    learning_rate=learning_rate).minimize(cross_entropy_loss)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "将输出的结果与正确结果进行对比，即可得到我们的网络输出结果的准确率。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "pred = tf.nn.softmax(logits)\n",
    "correct_pred = tf.equal(tf.argmax(pred, 1), y)\n",
    "accuracy = tf.reduce_mean(tf.cast(correct_pred, tf.float32))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "saver用于保存或恢复训练的模型。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "batch_size = 32\n",
    "trainig_step = 1000\n",
    "\n",
    "saver = tf.train.Saver()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "以上定义的所有操作，均为计算图，也就是仅仅是定义了网络的结构，实际需要运行的话，还需要创建一个session，并将数据填入网络中。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "after 100 training steps, the loss is 0.477826, the validation accuracy is 0.8626\n",
      "after 200 training steps, the loss is 0.58278, the validation accuracy is 0.9136\n",
      "after 300 training steps, the loss is 0.183637, the validation accuracy is 0.9146\n",
      "after 400 training steps, the loss is 0.178872, the validation accuracy is 0.928\n",
      "after 500 training steps, the loss is 0.0928254, the validation accuracy is 0.935\n",
      "after 600 training steps, the loss is 0.0808837, the validation accuracy is 0.9436\n",
      "after 700 training steps, the loss is 0.062387, the validation accuracy is 0.944\n",
      "after 800 training steps, the loss is 0.191039, the validation accuracy is 0.945\n",
      "after 900 training steps, the loss is 0.3649, the validation accuracy is 0.9488\n",
      "the training is finish!\n",
      "the test accuarcy is: 0.9436\n"
     ]
    }
   ],
   "source": [
    "with tf.Session() as sess:\n",
    "    sess.run(tf.global_variables_initializer())\n",
    "\n",
    "    #定义验证集与测试集\n",
    "    validate_data = {\n",
    "        x: mnist.validation.images,\n",
    "        y: mnist.validation.labels,\n",
    "    }\n",
    "    test_data = {x: mnist.test.images, y: mnist.test.labels}\n",
    "\n",
    "    for i in range(trainig_step):\n",
    "        xs, ys = mnist.train.next_batch(batch_size)\n",
    "        _, loss = sess.run(\n",
    "            [optimizer, cross_entropy_loss],\n",
    "            feed_dict={\n",
    "                x: xs,\n",
    "                y: ys,\n",
    "                learning_rate: 0.3\n",
    "            })\n",
    "\n",
    "        #每100次训练打印一次损失值与验证准确率\n",
    "        if i > 0 and i % 100 == 0:\n",
    "            validate_accuracy = sess.run(accuracy, feed_dict=validate_data)\n",
    "            print(\n",
    "                \"after %d training steps, the loss is %g, the validation accuracy is %g\"\n",
    "                % (i, loss, validate_accuracy))\n",
    "            saver.save(sess, './model.ckpt', global_step=i)\n",
    "\n",
    "    print(\"the training is finish!\")\n",
    "    #最终的测试准确率\n",
    "    acc = sess.run(accuracy, feed_dict=test_data)\n",
    "    print(\"the test accuarcy is:\", acc)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "INFO:tensorflow:Restoring parameters from ./model.ckpt-900\n",
      "0.9375\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x576 with 16 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "with tf.Session() as sess:\n",
    "    ckpt = tf.train.get_checkpoint_state('./')\n",
    "    if ckpt and ckpt.model_checkpoint_path:\n",
    "        saver.restore(sess, ckpt.model_checkpoint_path)\n",
    "        final_pred, acc = sess.run(\n",
    "            [pred, accuracy],\n",
    "            feed_dict={\n",
    "                x: mnist.test.images[:16],\n",
    "                y: mnist.test.labels[:16]\n",
    "            })\n",
    "        orders = np.argsort(final_pred)\n",
    "        plt.figure(figsize=(8, 8))\n",
    "        print(acc)\n",
    "        for idx in range(16):\n",
    "            order = orders[idx, :][-1]\n",
    "            prob = final_pred[idx, :][order]\n",
    "            plt.subplot(4, 4, idx + 1)\n",
    "            plt.axis('off')\n",
    "            plt.title('{}: [{}]-[{:.1f}%]'.format(mnist.test.labels[idx],\n",
    "                                                  order, prob * 100))\n",
    "            plt.imshow(mnist.test.images[idx].reshape((28, 28)))\n",
    "\n",
    "    else:\n",
    "        pass"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
